package main

import "fmt"

//指针类型
/**存储变量的内存地址。
使用 & 获取地址，* 解引用。**/

func main() {
	//a := 10
	//var p *int
	//p = &a
	//fmt.Println(*p)
	//*p = 20
	//fmt.Printf("%d\n", a)
	//
	//a = 15
	//fmt.Print(*p)
	//
	//var x *int
	//if x == nil {
	//	fmt.Printf("\nx为空\n")
	//}
	//if x != nil {
	//	fmt.Printf("x不为空")
	//}
	//fmt.Printf("x的内存地址为：%x\n", &x)
	fmt.Println("指针示例------")
	var arr = [3]int{1, 2, 3}
	var ptrArr [3]*int
	for i := 0; i < len(arr); i++ {
		ptrArr[i] = &arr[i]
		fmt.Printf("地址为%x 的arr[%d]的指针为：%d\n", &ptrArr[i], i, *ptrArr[i])
	}
	xmun := 15
	fmt.Printf("指针函数调用示例------\n")
	fmt.Printf("修改前的值为：%d\n", xmun)
	modifyViaPointer(&xmun, 20)
	fmt.Printf("修改后的值为：%d\n", xmun)
}

func modifyViaPointer(ptr *int, newValue int) {
	*ptr = newValue
	fmt.Printf("函数内修改后的值为：%d\n", *ptr)
}
